package com.sas.service;

import com.sas.entity.SalaryInfo;

import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;

/**
 * 薪资Service接口
 */
public interface SalaryService {

    /**
     * 保存薪资信息
     */
    SalaryInfo save(SalaryInfo salaryInfo);

    /**
     * 根据ID查询薪资信息
     */
    Optional<SalaryInfo> findById(Long id);

    /**
     * 查询所有薪资信息
     */
    List<SalaryInfo> findAll();

    /**
     * 根据薪资等级和员工类型查询有效薪资信息
     */
    Optional<SalaryInfo> findEffectiveSalaryInfo(Integer salaryLevel, Integer employeeType);

    /**
     * 根据员工类型查询薪资信息
     */
    List<SalaryInfo> findByEmployeeType(Integer employeeType);

    /**
     * 查询所有有效的薪资信息
     */
    List<SalaryInfo> findAllEffective();

    /**
     * 更新薪资信息
     */
    SalaryInfo update(SalaryInfo salaryInfo);

    /**
     * 删除薪资信息
     */
    void deleteById(Long id);

    /**
     * 计算员工工资
     * @param employeeId 员工ID
     * @param workHours 工作小时数
     * @param isNightShift 是否夜班
     * @param isWeekend 是否周末
     * @param isHoliday 是否节假日
     * @param overtimeHours 加班小时数
     * @return 计算后的工资
     */
    BigDecimal calculateSalary(Long employeeId, Double workHours, 
                              Boolean isNightShift, Boolean isWeekend, 
                              Boolean isHoliday, Double overtimeHours);

    /**
     * 计算员工某时间段的总工资
     */
    BigDecimal calculateTotalSalary(Long employeeId, String startDate, String endDate);

    /**
     * 计算房间某时间段的总工资成本
     */
    BigDecimal calculateRoomSalaryCost(Long roomId, String startDate, String endDate);

    /**
     * 获取工资对比数据
     */
    Object getSalaryComparison(String startDate, String endDate, String compareStartDate, String compareEndDate);
}